●Ver2.10　バージョンアップ情報（Ver2.0A から Ver2.10修正点）

(1) SGLのワークエリアの設定方法の変更
　前バージョンまででもSGLのシステムエリアの変更は可能でしたが、Ver.2.1よりSGLの
システムエリアをライブラリ(LIBSGL.A)から除き、オブジェクトファイルとしてリンク
するように変更しました。
　デフォルトでは、LIBディレクトリにSGLAREA.Oというファイルを用意していますので、
今までの設定で問題がないようであれば、SGLAREA.Oをリンクすることで今までと同じ設
定で動作します。システムエリアをカスタマイズする場合には、SAMPLEディレクトリ内
のWORKAREAにworkarea.cというファイルがありますので、必要個所の変更を行って
SGLAREA.Oの代わりにリンクしてください。

(2) slSynchFunction関数の追加(INIT.TXT)
  slSynch関数でブランキング割り込みを待つ間に実行する関数を登録します。
この関数ではあまり負荷がかかるような処理は行わないようにしてください。

(3) slConvert3Dto2D関数の追加(MATH.TXT)
　カレントマトリクスを使用して、3D相対座標から実際画面上に表示する際の画面座標
値を返す関数を追加しました。

(4) CD関係のバージョンアップ
　Ver2.10では以下のバージョンのライブラリを組み込みました。
　  ・CD通信インタフェース(CDC)           Ver.1.20(Ver2.0Aから変更なし)
　  ・ファイルシステムライブラリ(GFS)     Ver.2.11
  　・ストリームシステムライブラリ(STM)   Ver.2.11
　LIBCD.Aは、ファイルシステムライブラリのデバッグ時のサポート機能がありません。
LIBCD_D.Aは、ファイルシステム(GFS) デバッグ時のサポート機能つきでSIMMへのアクセ
スが可能です。今回の変更内容については、MANGFS.TXT、MANSTM.TXTを参考にしてくだ
さい。

(5) GCCのリンカのコマンド変更
　今回のサンプルプログラムからリンク時の実行ファイルをLDからコンパイルと同様に
GCCで行うように変更しました。これからGNU環境でリンクする場合は、LDは使用しない
で必ずGCCで行うようにしてください。

(6) スクロールセット変数のバグ修正
　slCharNBGx(RBG0)関数とslPageNBGx(RBG0)関数でのパターンネーム補助データの設定
の不具合を修正しました。

(7) 各種関数の追加
　Ver2.0Aのドキュメントに記していましたが、組み込まれていなかった関数を追加しま
した。


●Ver2.0A　バージョンアップ情報（Ver2.0 から Ver2.0A修正点）
(1) ＣＤ関数のバージョンアップ　-->Ver2.0A
　以下のバージョンのライブラリを組み込みました。
　  ・CD通信インタフェース(CDC)           Ver.1.20
　  ・ファイルシステムライブラリ(GFS)     Ver.2.10
  　・ストリームシステムライブラリ(STM)   Ver.2.10
　今回のライブラリより、ライブラリを2種類に分けました。
　　　LIBCD.A　　--> ファイルシステム(GFS) デバッグ時のサポート機能なし
　　　LIBCD_D.A　--> ファイルシステム(GFS) デバッグ時のサポート機能つき

(2) 初期化処理の追加【最重要】　-->Ver2.0A
　Cプログラムの実行環境を設定するために、
　　・未初期化データ領域をゼロで初期化すること（必需）
　　・ROM上にある初期化データをRAMにコピーすること（通常必要なし）
が必要です。この設定は必ずユーザアプリケーション側で行ってください。
　今回よりSGLのサンプルプログラムにその処理例を示しました。それに伴い、今までの
サンプルプログラムから以下のような変更を行っています。
　　・COMMONディレクトリにSGLのサンプルプログラムで共通の初期化プログラムを追加
　　　しました。この関数名にmainを使用しました。
　　・サンプルプログラム内の作成されていたmainという名の関数をss_mainという関数
　　　名に変更しました。
　　　共通初期化関数(main関数)から初期化処理後、ss_main関数を呼び出します。
　　・Makefileで生成していた sl.lnk（セクション宣言ファイル）をCOMMONディレクト
　　　リにファイルとして提供します。
　サンプルプログラムで示したような処理を行わないと、提供のライブラリが正常に動
作しない場合がありますので、必ず初期化処理を行ってください。

●Ver2.0　バージョンアップ情報（Ver1.31 から Ver2.0修正点）

(1) スプライト表示の拡張関数の追加(sprite.txt)
　従来のスプライト表示関数では指定できなかった ＨＶ独立スケール、ＨＶサイズ、
４頂点指定表示用の関数を追加しました。
  (a) slDispSpriteHV関数
    縦、横の表示スケールを指定して、変形スプライトを表示します。
    slDispSprite関数とは異なり、スケールにマイナスを指定した場合、キャラクタ
  は反転して表示されます。
  (b) slDispSpriteSZ関数
    縦、横の表示サイズを指定して、変形スプライトを表示します。
    サイズにマイナスが指定された場合には、反転して表示されます。
  (c) slDispSprite4P関数
  　画面上の４点を指定して、変形スプライトを表示します。
　　４点はウィンドウ中心に対するオフセット位置で指定し、全体を代表するＺ位置を
　別に指定します。４点は左上、右上、右下、左下の順(時計回り)で指定します。

(2) マスタCPUとスレーブCPUの通信方法の変更
　スレーブCPUがアイドリング状態にある場合、キャッシュスルー領域を通してマスタ
CPUのコマンドポインタをチェックしていたものを、FRTインプットキャプチャを監視す
るように変更して、マスタCPUへのアクセスを軽減しました。

(3) slFrameClipSize関数の追加
　スプライトおよび UseClipオプションを指定したポリゴン表示において、クリッピング
を行う領域の大きさを指定（変更）できるように slFrameClipSize関数を用意しました。

(4) 変形スプライトの描画の最適化
　変形スプライト（テクスチャとの表記も含む）を表示する際に、ウインドウの内部に
頂点があるか調べ、頂点0 がウインドウ内部になるようにキャラクタの反転と頂点の入
れ換えを必要に応じて行うようにしました。
　このソフト側でのプリクリッピングに対応により、ウインドウ内からはみ出た変形ス
プライトの描画効率アップを図りました。

(5) バーチャガンの対応
　ライブラリ内にバーチャガンへの対応処理を追加しました。ただし、対応させるには
アプリケーション側にも対応が必要です。対応方法は、サンプルプログラムのDEMOGUNデ
ィレクトリのプログラムを参照してください。

(6) 内部で使用しているCPU DMA転送チャンネルの変更
  SGLの内部ではサウンド関係のデータ転送にCPU-DMA転送が使用されていますが、この
CPU DMA転送中にVブランク割り込みが発生すると、スクロール転送で使用している
CPU DMA転送のチャンネルがぶつかることがわかり、サウンド転送時のCPU DMAのチャン
ネルを変更しました。
　今後SGLでは、CPU DMA転送のチャンネル1番はシステム予約としますので、アプリケー
ション側でCPU DMAを使用する場合は、必ずチャンネル0番を使用するかslDMACopy関数、
slDMAXCopy関数を使用してください。

(7) slSoundRequest関数の不具合対応
　slSoundRequest関数でSHツールとGNUツールのレジスタ待避方法の違いがあり、正しく
コマンドが発行されていない場合があり、修正しました。

(8) ビットマップ関数の修正
　ビットマップ関数においてslBitMapNbg0関数とslBitMapNbg1関数のテーブル順番と引
数の値とが合っていない、ビットマップサイズをバイト数と間違えている誤りがあり、
修正しました。

(9) slCharNbg3関数の２ｘ２セル時の不具合の対応
　slCharNbg3関数でキャラクタサイズが2×2(CHAR_SIZE_2x2)の場合、正しく表示されな
い現象を改善しました。

(10) PCM再生データのWORKRAM-L対応
　SGLではPCMデータの転送をSCU-DMAを用いて転送しているため、PCMデータをWORKRAM-L
に配置した場合、転送できずPCM再生が正しく行なわれない不具合を改善しました。
　ただし、WORKRAM-Lにデータを配置する場合、以下の３点を必ず守ってご使用ください。 
  (a) 再生データは偶数アドレスから配置されているものとして扱ってください。
     (アドレスの下位１ビットを０にして使用します)
     -> 偶数アドレスに配置して下さい。
  (b) 再生データがステレオで、８ビットの場合、左チャンネルのデータも偶数
　　アドレスから配置されているものとする。
     -> サンプル数を偶数にして下さい。
  (c) 再生データが8192フレーム以上の場合に、バッファをラッピングする際に
　　ノイズが出ることがある。
     -> 8192(2000H)フレームごとにデータを１バイト重複させて定義して下さい。
        ただし、先頭は1536(600H)フレームオフセットしたところから始まります。
        したがって、重複させる最初のデータは6656(1A00H)のデータとなります。

(11) slPutPolygon関数の頂点数0の場合の対応
　ポリゴン表示関数 slPutPolygon関数を実行する際に、頂点数、ポリゴン数に 0を指定
した場合、ループカウンタが最大となり、暴走してしまう現象をあり、頂点数 0の場合
の対応を追加しました。
　ただし、ポリゴン数 0の場合は、関数を実行しないアプリ側で対応するようにお願い
します。

(12) slRotAX関数の不具合
　slRotAX関数に計算のミスがあり修正しました。ドキュメントにも誤植があり、修正し
ました。

(13) バックアップサンプルのバグ(SBKLIB)
　バックアップライブラリの使用サンプルプログラムにプログラムミスがありました。
　場所は、SMPCから時間情報を取得するところで修正個所にはコメントを入れてあり
ます。

(14) バーチャガン対応サンプルプログラム(DEMOGUN)
　バーチャガンのデータ取得方法を示したサンプルプログラムを追加しました。

(15) Makefileの修正
　バイナリ形式に変換する方法を示しました。方法はCOFF形式ファイルをGNUツールの
OBJCOPY.EXEを使用して行っています。


●Ver1.31  バージョンアップ情報（Ver1.3 からVer1.31修正点)

(1) アドレスエラー対応
　slInitSound関数内でアドレスエラーが発生する不具合があり、改善しました。

(2) DMA_ScuResult関数の修正
　SBLライブラリと同様の仕様のDMA_ScuResult関数でバグがあり、修正しました。

●Ver1.3  バージョンアップ情報（Ver1.21 からVer1.3修正点)

(1) ワークエリアの割り振りのユーザ変更(memory.txt)
  システム用のワークエリアの割り振りをユーザが変更できるようになりました。詳細
は、memory.txtを参照して設定してください。

(2) VDP1描画終了待ちチェンジモードの対応(init.txt)
  　VDP1の描画終了を待ってメインシーケンスを進行させるモードを追加しました。ま
ず、slInitSystem関数の実行時にフレームカウンタをマイナスを設定してください。こ
の関数によりシステム変数 (Sint8)Resolution の MSBが 1になり、この時はVDP1の描画
終了のチェックが追加されます。ただし、このモードではフレームバッファの消去用に
全画面サイズのスプライトを1枚描画させているため、実際の画面に対し1画面分の余分
な描画が入ることになります。
  この対応により１つ関数が追加されました。
  ・slDynamicFrame関数 : 一定周期のフレームチェンジとVDP1の描画終了待ちフレー
  　　　　　　　　　　　 ムチェンジとを切り替えます。

(3) ウィンドウ機能の拡張(sprite.txt)
　スプライト（ポリゴン）が表示されるウィンドウを途中で切り替えることができるよ
うになりました。
  これまでは、slWindow関数を実行した時点で、手前のウィンドウに切り替わりました
が、slCurWindow関数を実行することで表示するウィンドウを指定することができます。
これに伴い、ウィンドウ情報を常に保持するようになったので、ウィンドウの設定回数
を減らすことにもなります。
　　(使用例)
　　　slCurWindow(winFar);
      slWindow(--- for Far side Window ---);
　　　slCurWindow(winNear);
      slWindow(--- for Near side Window ---);

　　　...

　　　slCurWindow(winFar);
      slPutPolygon(PD_XX);        /* ゲーム画面への表示 */
　　　slCurWindow(winNear);
      slPutPolygon(PD_xx);        /* マップへの表示 */

　　　slCurWindow(...);

　表示ウィンドウは、slSynch関数実行後 winFar に表示され、ウィンドウが切り替わる
slWindow関数の実行（slPutPolygon関数などの表示関数実行後）、もしくはslCurWindow
関数を実行するまで、同じウィンドウに対して表示処理が行われます。

【注意】
　slCurWindow関数によって切り替わるパラメータは以下の関数によって設定されたもの
のみです。
　・slWindow関数、slZdspLevel関数、slPerspective関数
　　環境マトリクス、光源ベクトルについては再設定されませんので、注意してくださ
　い。
　　slSprWinNum関数を実行するとカレントウィンドウナンバー（winFar、winNear）を
　返します。

(4) PAL版の対応
　　PAL版の対応として、TVサイズのモード（256ラインモード）が増えました。
　　　　TV_320x256、TV_352x256、TV_640x256、TV_704x256
　　　　TV_320x512、TV_352x512、TV_640x512、TV_704x512

(5) TVモードの変更関数の追加(init.txt)
  　TVモードを変更する slSetTVMode関数が追加されました。
  　ただし、システムクロックを変更するようなモードへの切り替えはエラーとなり
  ます。

(6) 外部画面制御レジスタの設定関数の追加(scroll.txt)
  　外部画面制御レジスタを設定する slExtSignal関数が追加されました。
  　MPEGなどの外部画面を有効にする場合に使用します。

(7) ズーム可能スクロール面設定関数の追加(scroll.txt)
  　ズーム可能なスクロール面の表示レートをスケールで指定できる関数が追加され
  ました。
  　slScrScaleNbg0関数、slScrScaleNbg1関数、slScrScaleR関数

(8) OBJECT構造体を使用したポリゴンモデルの表示(sprite.txt)
  　OBJECT構造体に設定された位置、回転角、スケールを使用してポリゴンモデルを表
  示します。この関数は以下の関数を実行したのと同じ処理を行います。
  　　void slPutObject(OBJECT *obptr)
      {
          slTranslate(obptr->pos[X], obptr->pos[Y], obptr->pos[Z]);
          slRotZ(obptr->ang[Z]);
          slRotY(obptr->ang[Y]);
          slRotX(obptr->ang[X]);
          if(obptr->pat != NULL) {
              slPutPolygon(obptr->pat);
          }
      }
    例えば、親子構造を持ったオブジェクト群を表示するには以下のような関数を作成
  することで実現できます。
      void PutAll(OBJECT *obptr)
      {
          slPushMatrix();
          {
              slPutObject(obptr);
              if(obptr->child != NULL){
                  PutAll(obptr);
              }
          }
          slPopMatrix();
          if(obptr->sibling != NULL) {
              PutAll();
          }
      }

(9) デバッグ関数の追加(packs.txt)
  　デバッグ用のテキスト表示に関する関数を追加しました。
  　　slCurScrn関数    : テキスト表示を行うスクロール面を指定します
  　　slLocateNbg関数  : スクロール面を指定した表示アドレスの算出します
  　　slLocatePage関数 : ページナンバーを指定した表示アドレスの算出します

(10) ポリゴン表示を全てスレーブCPUで行うslPutPolygonS関数の追加(sprite.txt)
  　slPutPolygon関数では、スレーブCPUの稼働状況を見て、マスタCPUが演算の一部代
  行をしていますが、このslPutPolygonS関数ではすべてスレーブCPUが行います。これ
  は、リクエストがあるまでスレーブCPUはウェイトしているため、slSynch関数から始
  めのリクエストまでのスレーブCPUの待ち時間を軽減するために、前のシーケンスで
  表示用のデータを作成し、slSynch関数実行後メインシーケンスの始めにまとめてポ
  リゴン表示のリクエストを発行して、スレーブの待ち時間を軽減させたい場合に使用
  します。

(11) ビットマップグラフィックス用の関数（256色）の追加
　ビットマップはVDP2のスクロール面のひとつをグラフィック画面として使用するもの
で、このライブラリでは256色パレットモードのみサポートします。
通常の初期化処理を行なった後、slInitBitMap関数を実行することで初期化できます。
  関数仕様については、bitmap.txtを参照してください。

(12) マトリクス演算用関数の追加(math.txt)
  マトリクス用関数として以下の関数が追加されました。
  ・slIncMatrixPtr関数　
  　マトリクススタックのポインタを進めます。slPushMatrixと異なりマトリクスの
  　コピーは行いません。
　・slDecMatrixPtr関数
  　マトリクススタックのポインタをひとつ戻します。slPopMatrix関数と同じです。
　・slRegistMatrix関数
  　カレントマトリクスを一時レジスタにコピーします。
　・slRegistTranslate関数
  　一時レジスタのマトリクスに対して、平行移動したものをカレントマトリクスにセ
  　ットします。一時レジスタは変化しません。これは、slPushMatrix関数、
  　slPopMatrix関数を多用する場合のオーバーヘッドを軽減するためのものです。
　・slUnitAngle関数
    カレントマトリクスの回転部分のみを初期化します。
　・slUnitTranslate関数
  　カレントマトリクスの平行移動部分のみを初期化します。
　・slGetTranslate関数
  　カレントマトリクスから平行移動部分を取り出し、指定されたバッファにコピーし
　  ます。カレントマトリクスに変化はありません。
  ・slCopyMatrix関数
  　一段下のマトリクスをカレントマトリクスにコピーします。
　・slLoadTranslate関数
  　カレントマトリクスの平行移動部分を指定された値に変更します。回転部分は変化
  　しません。
  ・slCheckOnScreen0関数
　　slCheckOnScreen関数のポジションを(0,0,0)で実行する関数です。

(13) 定数マクロ、コンバートマクロの追加
　以下の定数と変換マクロが追加されました。
　・M_PI　 　　円周率
　・RADtoANG 　ラジアンからアングル型への変換
　・SLocate    スクロールの表示位置の算出
　・MSBon      スプライトのシェード有効ビット

●Ver1.21  バージョンアップ情報（Ver1.2 からVer1.21修正点)
(1) slAtan関数の境界値の不具合対応
  引数 tx, ty の絶対値が等しいときに戻ってくる角度がおかしくなる障害の対応をし
ました。

(2) DMA関数(SBLから移植したもの)の不具合対応
  DMA_ScuMemCopy関数の不具合を改善しました。

(3) slSetTrayCheck関数の削除
  slSetTrayCheck関数を実行すると、その他のCD関係の関数が正常に動作しなくなるた
め、この関数の提供を中止します。
  この関数の代替対策として、CDC_GetHirqReq関数でトレイの状態を取得して、アプリ
側で処理するようにしてください。

(4) サンプルプログラムDEMO_Dのポリゴン漂流現象解消
  提供のサンプルプログラム DEMO_D でパッドを操作していないのにポリゴンが動く現
象があり、サンプルプログラムを修正しました。

●Ver1.2  バージョンアップ情報（Ver1.1 からVer1.2修正点)
(1) スプライト表示時のデッドロック
　スプライト非表示時にマスタＣＰＵとスレーブＣＰＵがデッドロックに陥る場合があ
り、これを改善しました。

(2) CDライブラリのファイル名
　CD-ROMファイルシステム（libcd.a）で、ファイル名が7文字 + "." + 3文字までしか
使用できなかったバグを改善し、ファイル名を8文字 + "." + 3文字まで使用できるよう
にしました。

●Ver1.1  バージョンアップ情報（Ver1.0 からVer1.1修正点)
(1) 三角関数精度向上
　　三角関数が使用するデータテーブルのデータ精度を上げることにより、8倍細かく
　三角関数の結果を得るようにしました。

(2) ペリフェラルのデバッガ対応
　ペリフェラルが使用する割り込み処理中において、デバッカによるプログラム停止が
プログラムに及ぼす影響を排除しました。

(3) 矩形スプライト表示改良
　矩形スプライトの表示で倍率が1.0のとき、ハードウエアの制約で指定したサイズより
縦横1ドットずつ大きく表示されていたのをサイズ通りに表示できるようにしました。

(4) フレームチェンジのタイミング変更
　フレームチェンジのタイミングでスプライトデータの作成が終了していないとき、残
りのスプライト表示が次のフレーム表示に持ち越されていたのを、このバージョンから
1フレームで表示しきれなかったスプライトを処理落ちとし、次のフレームには持ち越さ
ないようにしました。
